package com.o.Reflection.SingletonMode;

/**
 * 单例模式
 *
 * @author Mc.Chai
 * @program: Java基础
 * @create 2021-12-01-19:39 19:39
 */
public class TestSingleton {
    public static void main(String[] args) {
        Singleton s=Singleton.getInstance();
        System.out.println(s);
        Singleton s2=Singleton.getInstance();
        System.out.println(s2);
    }
}
/**
 * 方式一：饿汉式（类加载时创建，天生线程安全）
 * 缺点：不用的时候也被创建，占用一点资源
 * */
/*
class Singleton{
    private static final Singleton singleton=new Singleton();
    private Singleton(){};
    public static Singleton getInstance(){
        return singleton;
    }
}*/
/**
 * 方式二：懒汉式（使用时在创建、天生线程不安全（进行加锁））
 * */
/*
class Singleton{
    private static Singleton singleton=null;
    private Singleton(){}
    public synchronized static Singleton getInstance(){
        //判断里面是否存在对象
        if (singleton==null){
             singleton=new Singleton();
        }
        return singleton;

    }
}*/
/**
 * 方式三：懒汉式（使用时创建，线程安全）
 * 利用内部类
 * */
class Singleton{
    private Singleton(){};
    static class Holder{
        static final Singleton instance=new Singleton();
    }
    public static Singleton getInstance(){
        return Holder.instance;
    }
}
